package com.my.screenadapter.mThread;

import android.util.Log;
import android.view.View;

import com.my.screenadapter.Base.BaseActivity;
import com.my.screenadapter.R;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import butterknife.OnClick;

public class ThreadSyncActivity extends BaseActivity {
    public ExecutorService cachedThreadPool;
    @Override
    protected void init() {
        EventBus.getDefault().register(this);
        cachedThreadPool = Executors.newFixedThreadPool(1);
        upDataThread();
    }

    private void upDataThread() {
        cachedThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                if (recordNum >0 ){
                    upDate();
                }
            }
        });
    }

    private void upDate() {
        if (recordNum < 0){
            return;
        }
        Thread thread = Thread.currentThread();
        Log.i(TAG,"init"+thread.getId()+"--"+thread.getName()+"  recoredNum=="+recordNum);
        if (recordNum==3){
            EventBus.getDefault().post(new EventThreadTest(recordNum));
//            recordNum--;
//            upDate();
        }
        try {
            Thread.sleep(1000 * 5);
            Log.i(TAG,"sllllll"+thread.getId()+"--"+thread.getName()+"  recoredNum=="+recordNum);
            recordNum--;
            upDate();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected int initLayoutId() {
        return R.layout.activity_thread_sync;
    }

    int recordNum = 0;
    @OnClick(R.id.btn_contro_bingfa)
    public void controBingfa(View v){
        recordNum = 5;
        upDataThread();
    }

    /**
     * 接收识别记录
     *
     * @param recordEvent
     */

    /**
     * POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程。
     * MAIN 表示事件处理函数的线程在主线程(UI)线程，因此在这里不能进行耗时操作。
     * BACKGROUND 表示事件处理函数的线程在后台线程，因此不能进行UI操作。如果发布事件的线程是主线程(UI线程)，那么事件处理函数将会开启一个后台线程，如果果发布事件的线程是在后台线程，那么事件处理函数就使用该线程。
     * ASYNC 表示无论事件发布的线程是哪一个，事件处理函数始终会新建一个子线程运行，同样不能进行UI操作。
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventMainThread(EventThreadTest recordEvent) {
        Thread thread = Thread.currentThread();
        Log.i(TAG,"eventbus--"+thread.getId()+"---Name=="+thread.getName()+"  num=="+recordEvent.num);
        if (recordNum >0 ){
            recordNum--;
            upDate();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}
